package com.t.bricks.bussiness.db.mapper.loginuser;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.t.bricks.bussiness.db.entity.loginuser.LoginUser;
import com.t.bricks.bussiness.db.entity.loginuser.base.LoginUserBase;
import com.t.bricks.bussiness.model.loginuser.ConditionLoginUser;
import com.t.bricks.model.OrderInfo;
import com.t.bricks.model.Page;

@Mapper
public interface LoginUserMapper {
	
	/**
	 * 添加
	 * @Param loginUser
	 * @return
	 */
	int add(LoginUser loginUser);

	/**
	 * 删除
	 * @Param uId
	 * @Param iVersion
	 * @return
	 */
	int del(@Param("uId") String uId, @Param("iVersion") Integer iVersion);

	/**
	 * 修改
	 * 注意:当对象的属性值为null时不更新字段
	 * @Param loginUserBase
	 * @return
	 */
	int edit(LoginUserBase loginUserBase);

	/**
	 * 根据关键值取对象集合
	 * @Param loginUser
	 * @return
	 */
	List<LoginUser> findByKey(LoginUser loginUser);

	/**
	 * 根据关键值查询数量
	 * @Param loginUser
	 * @return
	 */
	int findCountByKey(LoginUser loginUser);

	/**
	 * 检查待修改内容是否存在重复数据
	 * @Param loginUserBaseData
	 * @return 重复返回true
	 */
	int checkRepeatByEdit(LoginUserBase loginUserBase);

	/**
	 * 检查待新增内容是否存在重复数据
	 * @Param loginUserData
	 * @return 重复返回true
	 */
	int checkRepeatByAdd(LoginUser loginUserBase);
    
	/**
	 * 查询分页信息
	 * @param page 分页信息对象
	 * @param orders 排序数据集合
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @param relDictionary 是否关联字典表
	 * @return
	 */
	List<LoginUser> findByPage(
		@Param("page") Page page,
		@Param("orders") List<OrderInfo> orders,
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionLoginUser condition,
		@Param("relDictionary") boolean relDictionary
	);
    
	/**
	 * 查询分页总数
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @return
	 */
	int findByPageCount(
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionLoginUser condition
	);

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @Param uId
	 * @param relDictionary 是否关联字典表
	 * @return
	 */
	LoginUser findByPageRow(
			@Param("uId") String uId,
			@Param("relDictionary") boolean relDictionary);

	/**
	 * 查询搜索用的数据
	 * @param whereStr 查询条件字符串
	 * @param orders 排序数据集合
	 * @param relDictionary 是否关联字典表
	 * @return
	 */
	List<LoginUser> findBySearch(
		@Param("whereStr") String whereStr,
		@Param("orders") List<OrderInfo> orders,
		@Param("relDictionary") boolean relDictionary
	);

	/**
	 * 查询导出到文件的数据
	 * @param orders 排序数据集合
	 * @param sLikeStr 全文检索
	 * @param dLikeDateSt 检索的开始时间范围
	 * @param dLikeDateEd 检索的结束时间范围
	 * @param condition 查询条件对象
	 * @param relDictionary 是否关联字典表
	 * @return
	 */
	List<LoginUser> findByExport(
		@Param("orders") List<OrderInfo> orders,
		@Param("sLikeStr") String sLikeStr,
		@Param("dLikeDateSt") Date dLikeDateSt,
		@Param("dLikeDateEd") Date dLikeDateEd,
		@Param("condition") ConditionLoginUser condition,
		@Param("relDictionary") boolean relDictionary
	);

	//---------------------------- 自动生成代码结束 ----------------------------//

	/**
	 * 修改密码
	 * @param uId
	 * @param sOldPass
	 * @param sNewPass
	 * @param iVersion
	 * @param sModifieder
	 * @return
	 */
	int editPass(
		@Param("uId") String uId,
		@Param("sOldPass") String sOldPass,
		@Param("sNewPass") String sNewPass,
		@Param("iVersion") int iVersion,
		@Param("sModifieder") String sModifieder
	);

	/**
	 * 设置用户类型
	 * @param uId 用户编号
	 * @param sType 用户类型
	 * @return
	 */
	int editUserType(
		@Param("uId") String uId,
		@Param("sType") Integer sType
	);

	/**
	 * 修改来源表中的密码
	 * @param uId
	 * @param sOldPass
	 * @param sNewPass
	 * @param sModifieder
	 * @param sOwner
	 * @return
	 */
	int editPassByOwner(
		@Param("uId") String uId,
		@Param("sOldPass") String sOldPass,
		@Param("sNewPass") String sNewPass,
		@Param("sModifieder") String sModifieder,
		@Param("sOwner") String sOwner
	);
	
}
